// 一、正则表达式的作用：主要用于检查某个字符串是否符合某种要求
// 二、正则表达式的使用场景：表单、用户输入的数据检查
// 三、创建正则表达式
// 1.字面量方式
// 基本语法：let 变量=/具体的正则表达式/模式修正符
// let reg1=/box/i;//匹配字符串中是否有box，i表示忽略大小写

// console.log(reg1.test("hebllo woxrld"));//false
// console.log(reg1.test("hebllobox woxrld"));//true
// console.log(reg1.test("heblloBox woxrld"));//true

// 2.构造函数方式
// 基本语法  let 变量=new RegExp("正则表达式","模式修正符");

// let reg2=new RegExp("box",i);

// 四、元字符：有特殊含义的符号
// console.log("hello \n world");
// 1.转义字符：把有特殊含义的符号转化成普通字符
// console.log(/1+1/.test("1+1"));//false
// console.log(/1\+1/.test("1+1"));//true
// \加入一些非元字符，就表示一些不能打印的特殊符号
//   \n：换行   \t:制表符   \r:回车符

// 2.包含型字符组：用中括号包含内容，是匹配字符组中的任意字符之一,每一个字符串匹配一个字符
// let reg=/[1234567890]/;//表示一个字符串中有任意数字都可以
// let reg2=/^[1234567890]/;//表示一个字符串必须是以数字开头   ^:表示开头
// let reg3=/^[1234567890]$/;//表示一个字符串必须一个数字   $:表示结尾
// let reg4=/^[1234567890][1234]$/;//表示一个字符串必须两个个数字   $:表示结尾
// let reg5=/^[0-9][a-z]$/;//表示一个字符串必须以数字开头，字母结尾   $:表示结尾
// console.log(reg.test("fhj3gf"));//true
// console.log(reg.test("fhjgf"));//false
// console.log(reg2.test("fhjgf"));//false
// console.log(reg2.test("3fhjgf"));//true
// console.log(reg3.test("3fhjgf4"));//false
// console.log(reg3.test("34"));//false
// console.log(reg3.test("3"));//true
// console.log(reg4.test("38"));//false
// console.log(reg4.test("34"));//true
// console.log(reg5.test("3f"));//true


// 3.排除型字符组：匹配除了字符组以外的数据，每个字符组匹配一个字符
// let reg=/[^0-9]/;//表示匹配处理数字之外的任意字符
// let reg2=/^[^0-9]$/;//表示一个字符串中只能有一个字符，并且该字符必须不是数字
// console.log(reg.test("6"));//false
// console.log(reg.test("6a"));//true
// console.log(reg2.test("6a"));//false
// console.log(reg2.test("6"));//false
// console.log(reg2.test("a"));//true

// 4.简记
// 1. \d:数字
// 2. \D:非数字
// 3. \s:空白字符
// 4. \S:非空白字符
// 5. \w:字母、数字、下划线
// 6. \W:非字母、数字、下划线

// 5.任意字符
//   . :表示除了回车换行以外的任意字符，不能表示所有的任意字符
// [\d\D]:表示任意字符
// [\s\S]:表示任意字符
// [\w\W]:表示任意字符

// 6.量词元字符：{n}，表示匹配n次
//   ？：{0,1}
//   *：{0,}
//   +：{1,}

// let reg=/^\d{6}$/;//表示匹配一个字符串只能是6个数字
// let reg2=/^1[3-9]\d{9}$/;//表示电话号码
// console.log(reg.test("123456"));//true
// console.log(reg.test("1asd23"));//false
// console.log(reg.test("12345678"));//false

// 贪婪模式：尽可能多的匹配次数，默认
// let reg=/a+/;
// console.log(reg.exec("aaaabbcc"));
// [ 'aaaa', index: 0, input: 'aaaabbcc', groups: undefined ]
// 'aaaa':正则表达式匹配到的字符串
// index: 0  ：起始下标
// input: 'aaaabbcc'：表示原本的字符串
// groups: undefined ：分组

// 懒惰模式：在量词后面加？，表示尽可能少的去匹配
// let reg=/a+?/;
// console.log(reg.exec("aaaabbcc"));//[ 'a', index: 0, input: 'aaaabbcc', groups: undefined ]


// 7.括号
// （1）分组
// let reg=/^23{4}$/;//
// let reg2=/^(23){4}$/;//
// console.log(reg.test("23232323"));//false
// console.log(reg2.test("23232323"));//true

// （2）引用(捕获内容)：一个正则表达式最多可以捕获到9个内容
// let reg=/^(\d{4})-(\d{2})-(\d{2})$/;//年月日的正则
// console.log(reg.exec("2023-10-23"));
// [
//     '2023-10-23',//表示正则匹配到的数据
//     '2023',//第一个括号捕获到的内容
//     '10',//第二个括号捕获到的内容
//     '23',//第三个括号捕获到的内容
//     index: 0,//起始下标
//     input: '2023-10-23',//原始字符串
//     groups: undefined
//   ]


//身份证号（18位）正则
// var cP = /^[1-9]\d{5}(18|19|([23]\d))\d{2}((0[1-9])|(10|11|12))(([0-2][1-9])|10|20|30|31)\d{3}[0-9Xx]$/;
// //                    年份前两位          年份后两位        月份                   日期                    
// //输出 true
// console.log(cP.exec("11010519880605371X"));
// [
//     '11010519880605371X',//正则表达式匹配到的数据
//     '19',//第一个括号捕获到的内容
//     undefined,
//     '06',
//     '06',
//     undefined,
//     '05',
//     '05',
//     index: 0,
//     input: '11010519880605371X',
//     groups: undefined
//   ]

// 输入一个算式，求结果
// 105+5  4-5 4*5 4/5
// let reg=/^(\d{1,})([\+\-\*\/])(\d{1,})$/;
// console.log(reg.exec("456+105"));


// 8.选择元字符： | 表示或者
// 注意：选择由左向右匹配，匹配到一个之后，后面的选项就忽略；选项之间不要重复


// 9.字符串替换方法:replace(需要替换的内容，替换后的内容):不影响原字符串，会得到替换之后的新字符串
// let str="hello";
// let s=str.replace("e","#");
// let s2=str.replace(/l/,"#");//
// let s3=str.replace(/l/g,"#");//g表示全局模式，会找到所有符合正则表达式的内容进行替换
// console.log(s);//h#llo
// console.log(s2);//he#lo
// console.log(s3);//he##o


// 字符串替换：输入一个字符串，替换掉制定内容，指定替换次数
// let str="asdfaaaaaa";
// let count=3;//替换次数
// let s1="a";//表示需要替换的内容
// let s2="#";//表示替换之后的内容
// let reg=new RegExp(s1);
// for(let i=0;i<count;i++){
//     str=str.replace(reg,s2);
// }
// console.log(str)

// 10.环视：当前字符旁边的字符需要满足某种条件，和当前字符无关


// 会看、会用、会改




